package office.fingerOfTheSword.Text1;


//JZ3 数组中重复的数字

import java.util.HashSet;

//在一个长度为n的数组里的所有数字都在0到n-1的范围内。
// 数组中某些数字是重复的，但不知道有几个数字是重复的。也不知道每个数字重复几次。
// 请找出数组中任意一个重复的数字。
// 例如，如果输入长度为7的数组[2,3,1,0,2,5,3]，那么对应的输出是2或者3。存在不合法的输入的话输出-1
public class main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 2};
        System.out.println(duplicate(arr));
    }

    public static int duplicate (int[] numbers) {
        //判断数组是否为空,是否只有不到一个元素
        if(numbers == null || numbers.length <= 1) {
            return -1;
        }
        //1.新建一个数组,将数组里的每个元素当作新数组的下标,而新数组中存放每个下标出现的次数

        int[] newNumbers = new int[numbers.length];

        //for循环第一种
        /*for (int i = 0; i <= numbers.length; i++) {
            if (newNumbers[numbers[i]] <= 0){
                newNumbers[numbers[i]]++;
            }else {
                return numbers[i];
            }
        }*/

        //for循环第二种
        /*for (int i: numbers) {
            newNumbers[i]++;
            if (newNumbers[i] == 2) {
                return i;
            }
        }
        return -1;*/

        //2.用set判断
        HashSet<Integer> hashSet = new HashSet<>();
        for (int i: numbers) {
            if (hashSet.contains(i)) {
                return i;
            }else {
                hashSet.add(i);
            }
        }
        return -1;
    }
}
